package com.labot.webapp.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.security.core.context.SecurityContextHolder;

import com.labot.model.Premio;
import com.labot.model.User;
import com.labot.model.Voucher;


/**
 * Action for facilitating User Management feature.
 */
public class PremiosAction extends BaseAction {
    private static final long serialVersionUID = 6776548938712115191L;
    
    private List<Premio> listaPremios= new ArrayList<Premio>();
    private List<Premio> listaPremiospop= new ArrayList<Premio>();
    private List<Voucher> listaVoucher= new ArrayList<Voucher>();

   
    private String puntos; 
    private Integer puntosCanje; 
    private String idPremios;
    private String nombre; 
    private String estado; 
    private Integer cantidad; 
    private String observaciones; 


	private Date fechaIni; 
    private Date fechaFin; 
    
    private Premio premio=new Premio();

  

    public String execute() {
        return SUCCESS;
    }
    
    public String cancel() {
    	return CANCEL;
    }


    /**
     * Fetch all Configs from database and put into local "configs" variable for retrieval in the UI.
     *
     * @return "success" if no exceptions thrown
     */
    public String list() {
    		
    	Date dia = new Date();
    	Integer valor=0;
    	try {
    		if(puntos!=null)
    		valor=Integer.parseInt(puntos);
    		listaPremios=servicePremios.getPremiosporRango(dia, null, valor);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
//    	areas = areaManager.getAreas();
//    	
    	return SUCCESS;
    }
    public String listpopup() {
		String username = SecurityContextHolder.getContext().getAuthentication().getName().toString();

       
    	Integer valor=0;
    	try {
    		if(idPremios!=null)
    		valor=Integer.parseInt(idPremios);
    		premio=servicePremios.getPremiosporID(valor);
    		if(premio !=null){
    		  listaPremiospop.add(premio);
    		}
    		//Guardar el Voucher
    		Voucher vouch = new Voucher();
    		vouch.setEstado("Solicitado");
    		vouch.setFecha(new Date());
    		vouch.setDescripcion(premio.getDescripcion());
    		vouch.setImagen(premio.getImage());
    		vouch.setFechafin(premio.getFechaFin());

    		User usuario=new User();
    		usuario=userManager.getUserByUsername(username);
    		usuario.agregarEventoBitacora(vouch);
    		userManager.save(usuario);
  
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
    	return SUCCESS;
    }
 
    public String guardarPremio(){
    	try{
    	Premio nuevoPremio = new Premio();
    	
    	nuevoPremio.setNombre(nombre);
    	nuevoPremio.setFechaFin(fechaFin);
    	nuevoPremio.setFechaIni(fechaIni);
    	nuevoPremio.setDescripcion(observaciones);
    	nuevoPremio.setPuntos(puntosCanje);
    	nuevoPremio.setStock(cantidad);
    	nuevoPremio.setFechaAlta(new Date());
    	nuevoPremio.setEstado(estado);
    	servicePremios.save(nuevoPremio);
    	super.addActionMessage("Se agrego el Premio correctamente!");
    	
    	}catch(Exception e){
    		log.error("Error al cargar los datos");
    		super.addActionError("No se pudo completar su solicitud");
    	}
    	
    	
    	
    	list();
    	return SUCCESS;
    	
    }
    
    public String editPremio(){
    	int valor=0;
    	try{
    	Premio nuevoPremio = new Premio();
    	if(idPremios!=null)
    		valor=Integer.parseInt(idPremios);
    	nuevoPremio=servicePremios.getPremiosporID(valor);
    	nombre = nuevoPremio.getNombre();
    	fechaFin = nuevoPremio.getFechaFin();
    	fechaIni = 	nuevoPremio.getFechaIni();
    	observaciones = nuevoPremio.getDescripcion();
    	puntosCanje = nuevoPremio.getPuntos();
    	cantidad = nuevoPremio.getStock();
    	estado = nuevoPremio.getEstado();
         	
    	}catch(Exception e){
    		log.error("Error al cargar los datos");
    		super.addActionError("No se pudo completar su solicitud");
    	}
    	
    	
    	
    	list();
    	return SUCCESS;
    	
    }
    
    public String getBitacoras(){
		String username = SecurityContextHolder.getContext().getAuthentication().getName().toString();
		

    	User usuario=new User();
		try{
			usuario=userManager.getUserByUsername(username);
			
			listaVoucher=usuario.getBitacoras();
		}catch(Exception e){
			
			
			
		}
    	
    	return SUCCESS;
    }
    
   
	public List<Premio> getListaPremios() {
		return listaPremios;
	}

	public void setListaPremios(List<Premio> listaPremios) {
		this.listaPremios = listaPremios;
	}

	public String getPuntos() {
		return puntos;
	}

	public void setPuntos(String puntos) {
		this.puntos = puntos;
	}

	public String getIdPremios() {
		return idPremios;
	}

	public void setIdPremios(String idPremios) {
		this.idPremios = idPremios;
	}

	public Premio getPremio() {
		return premio;
	}

	public void setPremio(Premio premio) {
		this.premio = premio;
	}

	public List<Premio> getListaPremiospop() {
		return listaPremiospop;
	}

	public void setListaPremiospop(List<Premio> listaPremiospop) {
		this.listaPremiospop = listaPremiospop;
	}
    
    public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public Integer getCantidad() {
		return cantidad;
	}

	public void setCantidad(Integer cantidad) {
		this.cantidad = cantidad;
	}

	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	public Date getFechaIni() {
		return fechaIni;
	}

	public void setFechaIni(Date fechaIni) {
		this.fechaIni = fechaIni;
	}

	public Date getFechaFin() {
		return fechaFin;
	}

	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	public Integer getPuntosCanje() {
		return puntosCanje;
	}

	public void setPuntosCanje(Integer puntosCanje) {
		this.puntosCanje = puntosCanje;
	}

	public List<Voucher> getListaVoucher() {
		return listaVoucher;
	}

	public void setListaVoucher(List<Voucher> listaVoucher) {
		this.listaVoucher = listaVoucher;
	}
	
	
	

	
	

}
